package com.gxar.uaa.server.base.model.role.mapper;

import com.gxar.uaa.api.dto.role.SysRole;
import com.gxar.uaa.server.base.model.role.vo.request.RoleCreateRequest;
import com.gxar.uaa.server.base.model.role.vo.request.RoleUpdateRequest;
import com.gxar.uaa.server.base.model.role.vo.response.RoleCreateResponse;
import com.gxar.uaa.server.base.model.role.vo.response.RoleInfoResponse;
import com.gxar.uaa.server.base.model.role.vo.response.RoleUpdateResponse;
import com.gxar.uaa.server.base.model.role.vo.response.RoleUserResponse;
import com.gxar.uaa.server.db.model.SysRoleEntity;
import com.gxar.uaa.server.db.model.SysRoleUserEntity;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * @author linsy
 * @version 1.0
 * @created 2024/1/26 11:51
 */
@Mapper
public interface RoleMapStruct {
    RoleMapStruct INSTANCE = Mappers.getMapper(RoleMapStruct.class);

    /**
     * 角色实体转角色信息响应
     *
     * @param entity 角色实体
     * @return 角色信息响应
     */
    RoleInfoResponse entityToInfo(SysRoleEntity entity);

    /**
     * 角色实体转角色信息响应
     *
     * @param entities 角色实体
     * @return 角色信息响应
     */
    List<RoleInfoResponse> entitiesToInfoList(List<SysRoleEntity> entities);

    /**
     * 角色创建请求转角色实体
     *
     * @param request 请求
     * @return 角色实体
     */
    SysRoleEntity createToEntity(RoleCreateRequest request);

    /**
     * 角色实体转角色创建响应
     *
     * @param entity 实体
     * @return 创建响应
     */
    RoleCreateResponse entityToCreate(SysRoleEntity entity);

    /**
     * 角色更新请求转实体
     *
     * @param request 更新请求
     * @return 实体
     */
    SysRoleEntity updateToEntity(RoleUpdateRequest request);

    /**
     * 角色实体转更新响应
     *
     * @param entity 实体
     * @return 更新响应
     */
    RoleUpdateResponse entityToUpdate(SysRoleEntity entity);

    /**
     * 角色用户
     *
     * @param entity 实体
     * @return 响应
     */
    RoleUserResponse roleUserToResponse(SysRoleUserEntity entity);

    /**
     * 角色用户
     *
     * @param entities 实体
     * @return 响应
     */
    List<RoleUserResponse> roleUsersToResponses(List<SysRoleUserEntity> entities);

    RoleInfoResponse sysRoleToRoleInfo(SysRole sysRole);

    List<RoleInfoResponse> sysRolesToRoleInfos(List<SysRole> sysRole);

}
